package ig.metrica.origenesdedatos;


import ig.util.ejb.IGEntityBean;
import ig.util.excepciones.DatoInvalidoExcepcion;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import javax.ejb.RemoveException;
import javax.naming.NamingException;
import javax.swing.JOptionPane;

public class FormatoBean extends IGEntityBean {
    
    /**
     * @uml.property  name="codigo"
     */
    private int codigo;
    
    /**
     * @uml.property  name="nombre"
     */
    private String nombre;
    
    /**
     * @return  Returns the codigo.
     * @uml.property  name="codigo"
     */
    public int getCodigo(){
        return codigo;
    }
    
    /**
     * @param codigo  The codigo to set.
     * @uml.property  name="codigo"
     */
    public void setCodigo(int codigo){
        this.codigo = codigo;
    }
    
    
    /**
     * @return  Returns the nombre.
     * @uml.property  name="nombre"
     */
    public String getNombre(){
        return nombre;
    }
    
    /**
     * @param nombre  The nombre to set.
     * @uml.property  name="nombre"
     */
    public void setNombre(String nombre){
        this.nombre = nombre;
    }
    
    
    public FormatoPK ejbCreate(int codigo,String nombre) throws CreateException{
        
        this.codigo = codigo;
        this.nombre = nombre;
        
        try {
            conn = getConexion("METRICADB");
            
            pstmt1 = conn.prepareStatement("INSERT INTO FORMATOSNORMATIVA VALUES(?,?)");
            pstmt1.setInt(1, codigo);
            pstmt1.setString(2, nombre);
            
            pstmt1.executeUpdate();
            
            return new FormatoPK(codigo);
        } catch (Exception e) {
            throw new CreateException(e.toString());
        }finally{
            try {pstmt1.close();} catch (Exception e) {}
            try {conn.close();} catch (Exception e) {}
        }
    }
    
    public void ejbPostCreate(int codigo,String nombre){}
    
    
    public void cargarEntidad() throws NamingException, SQLException{
        ResultSet r = null;
        try {
            FormatoPK pk = (FormatoPK)ctx.getPrimaryKey();
            long idInterna = pk.getIdInterna();
            conn = getConexion("METRICADB");
            pstmt1 = conn.prepareStatement("SELECT * FROM FORMATOSNORMATIVA WHERE CODIGO=?");
            pstmt1.setLong(1, idInterna);
            r = pstmt1.executeQuery();
            r.next();
            this.nombre = r.getString("DESCRIPCION");
        } catch (Exception e) {
            throw new SQLException(e.toString());
        }finally{
            try {pstmt1.close();} catch (Exception e) {}
            try {r.close();} catch (Exception e) {}
            try {conn.close();} catch (Exception e) {}
        }
    }
    
    public void actualizarEntidad() throws DatoInvalidoExcepcion, NamingException, SQLException{
        try{
            if ( nombre.trim().equals("")){
                throw new DatoInvalidoExcepcion("Alguna de las propiedades del formato posee un valor invalido.");
            }
            
            FormatoPK pk = (FormatoPK)ctx.getPrimaryKey();
            long idInterna = pk.getIdInterna();
            conn = getConexion("METRICADB");
            pstmt1 = conn.prepareStatement("UPDATE FORMATOSNORMATIVA SET DESCRIPCION=? WHERE CODIGO=?");
            pstmt1.setString(1, nombre);
            pstmt1.setLong(2, idInterna);
            pstmt1.executeUpdate();
        } catch (Exception e) {
            throw new SQLException(e.toString());
        }finally{
            try {pstmt1.close();} catch (Exception e) {}
            try {conn.close();} catch (Exception e) {}
        }
    }
    
    public void eliminarEntidad() throws RemoveException, SQLException, NamingException{
        ResultSet resultSet = null;
        try{
            FormatoPK pk = (FormatoPK)ctx.getPrimaryKey();
            long idInterna = pk.getIdInterna();
            conn = getConexion("METRICADB");
            
            pstmt1 = conn.prepareStatement("SELECT * FROM FORMATOUNIDADSUBCUENTA WHERE IDFORMATO=?");
            pstmt1.setLong(1, idInterna);
            resultSet = pstmt1.executeQuery();
            
            if (resultSet.next()) {
                throw new RemoveException("No se puede eliminar el FORMATOS NORMATIVA \n" + nombre + "\nporque tiene hijos en FORMATOUNIDADSUBCUENTA!");
            }else {
                pstmt1.close();
                pstmt1 = conn.prepareStatement("DELETE FROM FORMATOSNORMATIVA WHERE CODIGO=?");
                pstmt1.setLong(1, idInterna);
                if (pstmt1.executeUpdate()==0){
                    throw new RemoveException("No se pudo eliminar el FORMATOS NORMATIVA " + nombre );
                }
            }
        } catch (Exception e) {
            throw new SQLException(e.toString());
        }finally{
            try {resultSet.close();} catch (Exception e) {}
            try {pstmt1.close();} catch (Exception e) {}
            try {conn.close();} catch (Exception e) {}
        }
    }
    
    public FormatoPK ejbFindByPrimaryKey(FormatoPK pk) throws FinderException{
        ResultSet r = null;
        try {
            conn = getConexion("METRICADB");            
            pstmt1 = conn.prepareStatement("SELECT CODIGO FROM FORMATOSNORMATIVA WHERE ID=?");
            pstmt1.setLong(1, pk.getIdInterna() );            
            r = pstmt1.executeQuery();
            if (r.next()==false)
                throw new FinderException("No fue posible encontrar el FORMATOS NORMATIVA " + pk.getIdInterna());
            return pk;
        } catch (Exception e) {
            throw new FinderException(e.toString());
        } finally{
            try {r.close();} catch (Exception e) {}
            try {pstmt1.close();} catch (Exception e) {}
            try {conn.close();} catch (Exception e) {}            
        }
        
    }
    
    public Collection ejbFindByPropiedades( String nombre ) throws FinderException{
        ArrayList resultado = new ArrayList();
        Statement s = null;
        ResultSet r = null;
        try {
            conn = getConexion("METRICADB");            
            boolean condicion1 = false;
            String query = "SELECT CODIGO FROM FORMATOSNORMATIVA ";
            if ( (condicion1 = !nombre.trim().equals("") ) )
                query += " WHERE CODIGO=CODIGO";
            if (condicion1)
                query += " AND DESCRIPCION LIKE '%"+ nombre +"%' ";            
            query += "  ORDER BY CODIGO ";            
            s = conn.createStatement();
            r = s.executeQuery(query);
            
            while (r.next()){
                FormatoPK registro = new FormatoPK( (new Integer(r.getInt("CODIGO"))).intValue() );
                resultado.add( registro );
            }
        } catch (Exception e) {
            throw new FinderException(e.toString());
        } finally{
            try {r.close();} catch (Exception e) {}
            try {s.close();} catch (Exception e) {}
            try {conn.close();} catch (Exception e) {}            
        }
        return resultado;
    }    
}